是否可以将SQL Server 2008数据库中的列类型从varchar(255)
更改为varchar(MAX)
,而无需删除表并重新创建?
每次我尝试使用它时,SQL Server Management Studio都会抛出一个错误 - 但为了节省自己的头痛,我很高兴知道我是否可以在不必DROP和CREATE的情况下更改类型。
谢谢
答案 0 :(得分:74)
您应该可以使用TSQL来完成它。
像
这样的东西ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)
答案 1 :(得分:12)
'不允许保存更改。该 你所做的改变需要 下面的表格将被删除 重新创建。你要么做了 更改为不能的表 重新创建或启用该选项 防止保存需要的更改 要重新创建的表。'选项 “防止储蓄变化”不是 启用..
这是SQL Server Management Studio 2008中的一个新“功能”,默认情况下已打开。每当您进行更大的更改时,SSMS只能通过创建一个新表来重新创建表,然后从旧表中移动数据 - 所有这些都在后台(这些更改包括重新排序列等)。
默认情况下,此选项处于关闭状态,因为如果您的表具有FK约束和内容,则重新执行该表的这种方式可能会失败。但你绝对可以打开这个功能!
alt text http://i42.tinypic.com/19pegj.png
它位于Tools > Options
之下,一旦取消选中该选项,您就可以再次对表设计器中的表结构进行这些更改。
答案 2 :(得分:1)
请注意 与
之类的东西ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX)
https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table
Martin Smith的answare:
如果你将它增加到varchar(100 - 8000)
(即varchar(max))
之外的其他任何东西,你通过TSQL而不是SSMS GUI
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL这样做,而不是改变
NULL
的列可为空性1}}到NOT NULL
(在所有行都经过验证并且在某些情况下可能会从NOT NULL
写入NULL
到SCH-M
时会锁定表,这只是一个快速的元数据更改。可能需要等待表上的SCH-M
锁定,但一旦获得该锁定,该更改将非常即时。
需要注意的一点是,在等待SET LOCK_TIMEOUT
锁定期间,其他查询将被阻止,而不是在其前面跳过队列,因此您可能需要先考虑添加ALTER TABLE
。
另请确保在NOT NULL
语句中明确指定NULL
,如果这是原始列状态,否则该列将更改为允许 [testng] [TestNG] Running:
[testng] suite1
[testng]
[testng]
[testng] org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
[testng] Error: no display specified
[testng] Error: no display specified
[testng]
[testng] at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:118)
[testng] at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
[testng] at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
[testng] ===============================================
[testng] suite1
[testng] at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
[testng] at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
[testng] at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:104)
[testng] at test.webdriver.browser.FireFoxBrowser.invoke(FireFoxBrowser.java:20)
[testng] at test.webdriver.SonnetElementBase.invokeBrowser(SonnetElementBase.java:125)
[testng] Total tests run: 1, Failures: 1, Skips: 0
[testng] at scripts.RedBus.setup(RedBus.java:26)
[testng] ===============================================
[testng] at scripts.Driver.signup(Driver.java:44)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[testng] at java.lang.reflect.Method.invoke(Method.java:497)
[testng] at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
[testng] at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
[testng] at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
[testng] at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
[testng] at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
[testng] at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
[testng] at org.testng.TestRunner.privateRun(TestRunner.java:767)
[testng] at org.testng.TestRunner.run(TestRunner.java:617)
[testng] at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
[testng] at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
[testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
[testng] at org.testng.SuiteRunner.run(SuiteRunner.java:240)
[testng] at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
[testng] at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
[testng] at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
[testng] at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
[testng] at org.testng.TestNG.run(TestNG.java:1057)
[testng] at org.testng.TestNG.privateMain(TestNG.java:1364)
[testng] at org.testng.TestNG.main(TestNG.java:1333)
[testng]
[testng] The tests failed.`enter code here`
。