且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

sql server 2008中EXECUTE语句中的错误

更新时间:2023-02-05 18:42:20

因为你没有初始化@Query。



你的

Because you didn't initialise @Query.

Your
DECLARE @Query VARCHAR(MAX)



应该是


should be

DECLARE @Query VARCHAR(MAX) = ''



so :


so:

ALTER PROC [dbo].[CreateDatabase]
(
	@DatabaseName NVARCHAR(MAX),
	@TableName NVARCHAR(MAX) = 'LogAlarm',
	@path NVARCHAR(MAX) = 'D:\BackupDatabase\'
)
AS
EXECUTE(N'
IF NOT EXISTS
(
SELECT * FROM sys.databases WHERE [name] = ''' + @DatabaseName + '''
 )
BEGIN
   DECLARE @Query VARCHAR(MAX) = '' -- <-- ADD THIS BIT
   SET @Query = @Query + ''CREATE DATABASE '+@DatabaseName +' ON  PRIMARY ''
   SET @Query = @Query + ''( NAME = '''''+@DatabaseName +''''', FILENAME = '''''+@path+@DatabaseName +'.mdf'''' )''
   SELECT(@Query)
END
')


您好,



请用此更改您的程序

Hi,

Please Alter your Procedure with this
ALTER PROC [dbo].[CreateDatabase]
(
	@DatabaseName NVARCHAR(MAX),
	@TableName NVARCHAR(MAX) = 'LogAlarm',
	@path NVARCHAR(MAX) = 'D:\BackupDatabase\'
)
AS
BEGIN 

	DECLARE @Query NVARCHAR(MAX),
	@DBName Nvarchar(100),
	@LogName NVARCHAR(100),
	@LogFile NVARCHAR(100)
	
	
	SET @DBName = @DatabaseName+'.mdf'
	SET @LogName = @DatabaseName+'_log'
	SET @LogFile = @DatabaseName+'_log.ldf'
	
SET @Query = 
'
IF NOT EXISTS
(
SELECT * FROM sys.databases WHERE [name] = ''' + @DatabaseName + '''
 )
 
BEGIN

CREATE DATABASE [' + @DatabaseName +'] ON  PRIMARY ( NAME = N'''+ @DatabaseName + ''', FILENAME = N'''+@path+@DBName+''', SIZE = 3072KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'''+ @LogName +''', FILENAME = N'''+@path+@LogFile+''' , SIZE = 1024KB , FILEGROWTH = 10%)

END'

EXEC (@Query);

END  





问候,

Ahmed Mandour



Regards,
Ahmed Mandour