我試圖半自動創建我的數據庫 作爲這一部分,我想添加列描述的擴展屬性。 當我嘗試在腳本中運行sp_sqlexec(或者甚至只是Exec(@mystring)時,出現錯誤,但是如果在調試時從監視窗口複製動態sql字符串,然後在複製的字符串上運行sp_sqlexec單獨的窗口我沒有得到任何錯誤和擴展屬性正確添加 下面的腳本演示該問題:在SSMS複製的字符串與原始字符串有不同的行爲
--Create a table to apply column descriptions to
Create table dbo.table1 (id int, name nvarchar(20));
--Create the table that contains our column descriptions
Create table dbo.column_descs_table (schemaname nvarchar(20), tablename nvarchar(20), columnname nvarchar(20), column_description nvarchar(20))
Insert into column_descs_table (schemaname, tablename, columnname, column_description)
values ('dbo', 'table1', 'id', 'the id column'), ('dbo' , 'table1', 'name', 'the name column');
--Dynamic sql string varaible to hold the commands
Declare @dyn_sql nvarchar(max);
Set @dyn_sql = 'N'''; --Set to opening quote
--now create the string containing commands to add column escriptions
SELECT @dyn_sql = @dyn_sql + N' EXEC sp_addextendedproperty ''''Col Desc'''', ''''' + column_description + N''''', ''''SCHEMA'''', ' + schemaname + N', ''''TABLE'''', ' + tablename + N', ''''COLUMN'''', ' + columnname + N' ;'
FROM dbo.column_descs_table
Set @dyn_sql = @dyn_sql + ''''; --add the closing quote
Print @dyn_sql --If I copy the contents of @dyn_sql here and run seperately it works OK
Exec sp_sqlexec @dyn_sql -- this line causes error
我得到的錯誤是 消息102,15級,狀態1,行 附近有語法錯誤'EXEC sp_addextendedproperty '山口說明', 'id列', 'SCHEMA',DBO, 'TABLE',表1, '列',ID; EXEC sp_addextendedprope'。
然而,如果我單步執行代碼並複製@dyn_sql的內容,則粘貼如下:
Exec sp_sqlexec N'EXEC sp_addextendedproperty''Col Desc''',''id'''',''SCHEMA' ',dbo,'TABLE',table1,''COLUMN'',id; EXEC sp_addextendedproperty''Col Desc'',''名稱列'','SCHEMA',dbo,''TABLE'',table1,''COLUMN'',名稱;'
然後,上述工作正常,並按預期添加列描述。
對這個特定的複製問題的任何幫助非常感謝。我明白使用動態SQL的安全問題(這個腳本會從數據庫中刪除一次我的設置完成)提前
感謝
裘德
sp_sqlexec在SQL Server 7假想刪除,不再正式支持(http://technet.microsoft.com/en-us/library/cc917540.aspx)。我很驚訝它仍然存在於SQL2008R2中 - 在線文檔早已不復存在。 – MartW
感謝您的建議。我將更改腳本以使用sp_executesql。 –