下面的t-sql代码编译得很好。但当我像它一样运行它 exec [SP_ATTACH_NW] N'C:\ myfolder'我明白了
Msg 5105,Level 16,State 2,Procedure SP_ATTACH_NW,Line 14 发生文件激活错误。物理文件名“N @ mdfFileName”可能不正确。诊断并更正其他错误,然后重试该操作。
USE master
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_ATTACH_NW] (
@DestFolder varchar(255)
)
AS
BEGIN
SET NOCOUNT ON;
Declare @mdfFileName varchar(255)
Declare @ldfFileName varchar(255)
set @mdfFileName = @DestFolder + '\northwnd.mdf'
set @ldfFileName = @DestFolder + '\northwnd.ldf'
CREATE DATABASE [Northwind] ON
( FILENAME = N@mdfFileName ),
( FILENAME = N@ldfFileName )
FOR ATTACH
END
请指教。感谢
答案 0 :(得分:3)
CREATE DATABASE的文件名参数中不能包含变量(MSDN在语法中不显示@vars)
上面的代码实际上是在查找常量" N @ mdfFileName"作为文件名。
您需要动态SQL在@MyBuiltSQL中构建字符串,然后运行EXEC(@MyBuiltSQL)
注意:" N"这里的前缀不会使@mdfFileName nvarchar无论如何